package com.hospital.controller;

import com.hospital.entity.Register;
import com.hospital.service.RegisterService;
import com.hospital.vo.ResponseVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;


/**
 * 挂号控制层类
 * @author coder_zzm
 * @date 2022/5/17 22:51
 */
@Slf4j
@RestController
@RequestMapping("/register")
public class RegisterController {

    @Autowired
    private RegisterService registerService;

    /**
     * 日期添加处理方法
     * @param binder 参数
     */
    @InitBinder
    public void initBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
    }

    /**
     * 获取所有挂号信息
     * @param pageNum 页码
     * @param pageSize 每页显示数量
     * @return 挂号信息列表
     */
    @GetMapping("/getAllAndPage")
    public ResponseVO getAllAndPage(@RequestParam(defaultValue = "1") Integer pageNum,
                                    @RequestParam(defaultValue = "5") Integer pageSize) {
        log.info("控制层开始查询所有挂号信息...");
        return registerService.getAllAndPage(pageNum, pageSize);
    }

    /**
     * 查询挂号详细信息
     * @param rId 挂号编号
     * @return 挂号详细想信息
     */
    @GetMapping("/getRegisterDetail")
    public ResponseVO getRegisterDetail(String rId) {
        log.info("控制层查询挂号详细信息...");
        return registerService.getRegisterDetail(rId);
    }

    /**
     * 添加挂号信息
     * @param register 挂号实体类
     * @return 挂号是否添加成功
     */
    @PostMapping("/addRegister")
    public ResponseVO addRegister(Register register) {
        log.info("控制层添加药品信息...");
        return registerService.addRegister(register);
    }

    /**
     * 根据挂号编号删除挂号信息
     * @param rId 挂号编号
     * @return 受影响行数
     */
    @PostMapping("/delRegisterGetById")
    public ResponseVO delRegisterGetById(Integer rId) {
        log.info("控制层删除挂号信息...");
        return registerService.delRegisterGetById(rId);
    }

    /**
     * 根据挂号编号修改挂号信息
     * @param register 挂号实体类
     * @return 挂号信息是否修改成功
     */
    @PutMapping("/updateRegister")
    public ResponseVO updateRegister(Register register) {
        log.info("控制层修改挂号信息...");
        return registerService.updateRegister(register);
    }

    /**
     * 根据挂号人姓名查询信息方法
     * @param rName 挂号人姓名
     * @return 多条记录
     */
    @GetMapping("/getRegisterByName")
    public List<Register> getRegisterByName(String rName) {
        log.info("控制层根据挂号人姓名查询信息方法");
        return registerService.getRegisterName(rName);
    }
}
